package com.example.design.shejimoshi.action.oberver.基于spring实现;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 被观察者
 */
@RestController
public class OberverController {
    @Autowired
    ApplicationContext applicationContext;


    @GetMapping("/oberver")
    public void oberver(){
        OrderEvent orderEvent = new OrderEvent(this,1L);
        /**
         * 发布事件就是循环去执行这些事件
         * 原理：
         * 1、AbstractApplicationContext.java->publishEvent 发布事件
         * 2、SimpleApplicationEventMulticaster.java -> multicastEvent获取所有类型为ApplicationListener的事件，依次执行invokeListener
         * invokeListener ->doInvokeListener->执行事件的onApplicationEvent方法
         * 完毕
         *
         * 为什么ApplicationListener需要定义一个泛型？
         * 因为ApplicationListener是一个应用监听器，是给别人用的，你不知道人家的入参是什么，有什么字段
         *
         */
        applicationContext.publishEvent(orderEvent);
    }

}
